/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-08-07
 * Time: 23:15
 */
public class Solution {
    /**
     * 方法一: DP
     * 记录某天 只有股票和 不持有股票的两种情况下的最大利润
     */
    public int maxProfit1(int[] prices, int fee) {
        int len = prices.length;
        int sell = 0;
        int hold = -prices[0];
        for (int i = 1;i < len;i++) {
            sell = Math.max(sell, hold+prices[i]-fee);
            hold = Math.max(hold, sell-prices[i]);
        }
        return sell;
    }

    /**
     *  方法二: 贪心
     *  假买假卖
     */
    public int maxProfit2(int[] prices, int fee) {
        // 手续费算到购买时的
        // 第一次购买, 需要手续费
        int buy = fee + prices[0];
        int profit = 0;
        for (int i = 1;i < prices.length;i++) {
            // 有利可图, 假卖
            if (prices[i] > buy) {
                profit += prices[i] - buy;
                // 这里不用加手续费就是因为假卖, 因为后面如果价格是一直上升的话
                // 等到价格最高的时候在卖, 这样才能将所有的利润全都赚到
                // 不然中间来回买卖的话有手续费
                buy = prices[i];
            } else if (prices[i] + fee < buy) {
                // 假买
                // 假如说在这个时候买入, 比在之前买入时便宜
                // 那么就修改为这个时候买入, 而相当于之前就没有买
                buy = prices[i] + fee;
            }
        }
        return profit;
    }
}
